package cn.explink.dop.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.transaction.annotation.Transactional;

import cn.explink.dop.entity.vo.OrderVO;
import cn.explink.eap.core.common.service.CommonService;

/**
 *
 * @author songkaojun
 */
@Transactional
public interface OrderService extends CommonService {

	public List<OrderVO> getListData(final OrderVO orderVO);

	public Map<String, Object> getListDataByPage(final OrderVO orderVO, String deliveryManName, final int pageNum, final int pageSize);

	public Integer getCountByStatus(String deliveryManId, List<Integer> statusList);

	public List<OrderVO> getOrderVOListByStatusAndDate(String deliveryManId, List<Integer> statusList, Date startDate, Date endDate);

	public List<OrderVO> getByIdList(List<String> orderIdList);

	/**
	 * 分单查询
	 *
	 * @param deliveryManId
	 * @param statusList
	 * @param startDate
	 * @param endDate
	 * @param pageIndex
	 * @param pageCount
	 * @return
	 */
	public List<OrderVO> getOrderVOListByStatusAndDate(String deliveryManId, List<Integer> statusList, Date startDate, Date endDate, int pageIndex, int pageCount);

	/**
	 *
	 * @Title: getOrderVOListByStatusAndDate4APP
	 * @Description: APP分页查询订单
	 * @author 孟凡岭
	 * @param @param deliveryManId
	 * @param @param statusList
	 * @param @param pageNum 第几页
	 * @param @param pageNumOffset 如果pageNumOffset偏移量大于1，则需要从第一条返回(pageNumOffset
	 *        * pageSize)条数据
	 * @param @param pageSize 每页多少条
	 * @param @param startDate
	 * @param @param endDate
	 * @param @return
	 * @return List<OrderVO> 返回类型
	 * @throws
	 */
	public List<OrderVO> getOrderVOListByStatusAndDate4APP(String deliveryManId, List<Integer> statusList, int pageNum, int pageNumOffset, int pageSize, Date startDate, Date endDate);

	/**
	 *
	 * @Title: getTheDayUpMoney
	 * @Description: 当天需要缴纳多少钱和已缴纳多少钱 ：需要缴纳--->当天实收款总减当天取餐付款总数 ：已缴纳--->状态为已成功的
	 * @author 孟凡岭
	 * @param @param Id
	 * @param @return
	 * @return Map<String,Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> getTheDayUpMoney(String Id);

	/**
	 *
	 * @Title: getRealityIncome
	 * @Description: 获取当天实际收入
	 * @author 孟凡岭
	 * @param @param userId
	 * @param @return
	 * @return BigDecimal 返回类型
	 * @throws
	 */
	public BigDecimal getRealityIncome(String Id);

	/**
	 *
	 * @Title: getMonthIncome
	 * @Description: 获取当月实际收入
	 * @author 孟凡岭
	 * @param @param userId
	 * @param @return
	 * @return BigDecimal 返回类型
	 * @throws
	 */
	public BigDecimal getMonthIncome(String userId);

	/**
	 * @param pageSize
	 * @param pageNum
	 *
	 * @Title: getDaySuccessOrderList
	 * @Description: 获取当天需要缴纳订单列表，支付方式为现金，按修改时间排序
	 * @author 孟凡岭
	 * @param @param id
	 * @param @return
	 * @return List<OrderVO> 返回类型
	 * @throws
	 */
	public List<OrderVO> getDaySuccessOrderList(String id, int pageNum, int pageSize);

	/**
	 *
	 * @Title: getWaitSendOrder
	 * @Description: 获取待配送的订单，按照送餐时间排序
	 * @author 孟凡岭
	 * @param @param id
	 * @param @param statusList
	 * @param @param pageNum
	 * @param @param pageNumOffset 如果pageNumOffset偏移量大于1，则需要从第一条返回(pageNumOffset
	 *        * pageSize)条数据
	 * @param @param pageSize
	 * @param @return
	 * @return List<OrderVO> 返回类型
	 * @throws
	 */
	public List<OrderVO> getWaitSendOrder(String id, List<Integer> statusList, int pageNum, int pageNumOffset, int pageSize);

	/**
	 * @param pageSize
	 * @param pageNum
	 *
	 * @Title: getTheDaySuccessOrderDetail
	 * @Description: 获取当天帐单详情
	 * @author 孟凡岭
	 * @param @param id
	 * @param @return
	 * @return List<Map<String,Object>> 返回类型
	 * @throws
	 */
	public List<Map<String, Object>> getTheDaySuccessOrderDetail(String id, int pageNum, int pageSize);

	/*
	 * 根据return_id字段得到所有归班单下的订单
	 */
	public Map<String, Object> getOrderList(String id, int pageNum, int pageSize);

	/**
	 *
	 * @Title: getSysDate
	 * @Description: 获取当前系统时间
	 * @author 孟凡岭
	 * @param @return
	 * @return Date 返回类型
	 * @throws
	 */
	public Date getSysDate();

	/**
	 *
	 * @Title: getAlreadyMoneyAndOrderList
	 * @Description: 获取已经缴纳金钱的订单列表
	 * @author 孟凡岭
	 * @param @param manId
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @return
	 * @return List<Map<String, Object>>返回类型
	 * @throws
	 */
	public List<Map<String, Object>> getAlreadyMoneyAndOrderList(String manId, int pageNum, int pageSize);

	/**
	 * @param manId
	 *
	 * @Title: delive
	 * @Description: 分配派送人员，并返回记录数
	 * @author 孟凡岭
	 * @param @param ids
	 * @param @return
	 * @return Map<String,Integer> 返回类型
	 * @throws
	 */
	public Map<String, Integer> delive(String[] ids, String manId);

	/**
	 *
	 * @Title: storeAcceptGetOrderList
	 * @Description: 店面受理查询订单
	 * @author 孟凡岭
	 * @param @param orderVO
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @return
	 * @return Map<String,Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> storeAcceptGetOrderList(OrderVO orderVO, int pageNum, int pageSize);

	/**
	 *
	 * @Title: cancelOrder
	 * @Description: 订单取消
	 * @author 孟凡岭
	 * @param @param ids
	 * @param @param outCauseDesc
	 * @param @param insideCauseDesc
	 * @return Map<String, Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> cancelOrder(String[] ids, String outCauseDesc, String insideCauseDesc);

	/**
	 *
	 * @Title: makeFoodSuccess
	 * @Description: makeFoodSuccess
	 * @author 孟凡岭
	 * @param @param ids
	 * @return Map<String, Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> makeFoodSuccess(String[] ids);

	/**
	 *
	 * @Title: startMakeFood
	 * @Description: 开始备单
	 * @author 孟凡岭
	 * @param @param ids
	 * @return Map<String, Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> startMakeFood(String[] ids);

	/**
	 * @param pageSize
	 * @param pageNum
	 * @param returnDate
	 *
	 * @Title: getReturnSettleDetail
	 * @Description: 归班反馈中，获取指定配送员当天成功的订单
	 * @author 孟凡岭
	 * @param @param deliveryManId
	 * @param @return
	 * @return List<OrderVO> 返回类型
	 * @throws
	 */
	public Map<String, Object> getReturnSettleDetail(int pageNum, int pageSize, String deliveryManId, String returnDate, String returnRecordId, int status) throws Exception;

	/**
	 *
	 * @Title: storeFrontAccept
	 * @Description: 门店接受订单
	 * @author 孟凡岭
	 * @param @param ids
	 * @return void 返回类型
	 * @throws
	 */
	public void storeFrontAccept(String[] ids);

	/**
	 *
	 * @Title: countDeliveryCharge
	 * @Description: 统计派送费用
	 * @author 孟凡岭
	 * @param @param deliveryManId
	 * @param @param startTime
	 * @param @param endTime
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @return
	 * @return Map<String,Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> countDeliveryCharge(String deliveryManId, String startTime, String endTime, int pageNum, int pageSize);

	/**
	 *
	 * @Title: getSettleDetail
	 * @Description: 获取派费详情
	 * @author 孟凡岭
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @param deliveryManId
	 * @param @param returnDate
	 * @param @return
	 * @return Map<String, Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> getSettleDetail(int pageNum, int pageSize, String deliveryManId, String returnDate);

	/**
	 *
	 * @Title: getRecordDetail
	 * @Description: 通过派费历史记录查看详情
	 * @author 孟凡岭
	 * @param @param pageNum
	 * @param @param pageSize
	 * @param @param deliveryManId
	 * @param @param returnDate
	 * @param @param returnRecordId
	 * @param @return
	 * @return Map<String,Object> 返回类型
	 * @throws
	 */
	public Map<String, Object> getRecordDetail(int pageNum, int pageSize, String deliveryManId, String returnDate, String returnRecordId);

	/**
	 *
	 * @Title: getByIdAndDeliveryManId
	 * @Description: 通过订单号和配送员ID查询订单
	 * @author 孟凡岭
	 * @param @param orderId
	 * @param @param deliveryManId
	 * @param @return
	 * @return OrderVO 返回类型
	 * @throws
	 */
	public OrderVO getByIdAndDeliveryManId(String orderId, String deliveryManId);

}
